from django.conf import settings

from libs.celery_tasks.main import app
from django.core.mail import send_mail


# bind：保证task对象会作为第一个参数自动传入
# name：异步任务别名
# retry_backoff：异常自动重试的时间间隔 第n次(retry_backoff×2^(n-1))s
# max_retries：异常自动重试次数的上限
@app.task(bind=True, name='send_verify_email', retry_backoff=3)
def send_verify_email(self, to_email, verify_url):

    subject = "美多商城邮箱验证"  # 邮件标题
    message = ''  # 普通邮件正文，普通字符串
    from_email = settings.EMAIL_FROM  # 发件人
    recipient_list = [to_email] # 收件人列表

    # 多媒体邮件正文，可以是html字符串
    html_message = f"<p>尊敬的用户您好！</p>" \
                   f"<p>感谢您使用美多商城。</p>" \
                   f"<p>您的邮箱为：{to_email}请点击此链接激活您的邮箱：</p>" \
                   f'<p><a href="{verify_url}">{verify_url}<a></p>'

    try:
        send_mail(subject=subject, message=message, from_email=from_email, recipient_list=recipient_list, html_message=html_message)
    except Exception as e:
        settings.LOGGER.error('验证邮件发送失败', e)
        # 自动重复发送三次
        raise self.retry(exc=e, max_retries=3)
